# 循环内的变量不建议在循环外使用， 因为 pyhon 中没有块级作用域

## local、enclosing、global、built-in

### local：局部作用域

def greeting():
    name = "user1"
    print("hello,", name)

greeting()
print(name)  # 报错, name 在函数外不可见

x = 10 # 全局变量
def func1():
    x += 20  # x 相当于一个同名的新的局部变量；此时无初值。UnboundLocalError: local variable 'x' referenced before assignment
    print("x:",x)
func1()

### enclosing： 封闭作用域
### 嵌套函数中，内层函数对外层函数变量的访问
### 可以使用 nonlocal 关键字，修改嵌套函数中变量的封闭作用域

def outer():
    x = "外层函数的变量"
    def inner():
        nonlocal x # 可以将内层变量的值传到外层，以修改其值
        x = "内层变量"
        print("x in inner:",x)
    inner()
    print("x in outer:",x)

outer()

### global：全局变量
# 在函数中，可以使用 global 关键字声明变量为全局变量

def func2():
    global m
    m = "全局"
    print(m)
func2()
print(m)


### built-in：内置函数和变量
